# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:张广勤
@Web site: https://www.tunan.wang
@Github:www.github.com
 
@File:url2list.py
@Time:2024/9/4 9:00

@Motto:不积跬步无以至千里，不积小流无以成江海！
"""
# https://www.stats.gov.cn/sj/tjgb/ndtjgb/qgndtjgb/index.html
# https://www.stats.gov.cn/sj/tjgb/ndtjgb/qgndtjgb/index_1.html
# https://www.stats.gov.cn/sj/tjgb/ndtjgb/qgndtjgb/index_2.html
# https://www.stats.gov.cn/sj/tjgb/ndtjgb/qgndtjgb/index_3.html

# urls = ['https://www.stats.gov.cn/sj/tjgb/ndtjgb/qgndtjgb/index.html',
# 'https://www.stats.gov.cn/sj/tjgb/ndtjgb/qgndtjgb/index_1.html',
# 'https://www.stats.gov.cn/sj/tjgb/ndtjgb/qgndtjgb/index_2.html',
# 'https://www.stats.gov.cn/sj/tjgb/ndtjgb/qgndtjgb/index_3.html']
#
# # print(urls)
# base_url = 'https://www.stats.gov.cn/sj/tjgb/ndtjgb/qgndtjgb/'

import requests
from bs4 import BeautifulSoup
import re

# base_url = 'https://www.stats.gov.cn/sj/tjgb/ndtjgb/qgndtjgb/'
# num_pages = 4  # 总页数

def url_list(base_url,num_pages):
    # 使用列表推导式构造URL列表
    urls = [f'{base_url}index_{i}.html' if i > 0 else f'{base_url}index.html' for i in range(num_pages)]
    # print(urls)
    return urls

#函数不通用，因为网页结构不同，但小修改class_可用
def extract_reports(base_url,url):
    # 发送请求
    response = requests.get(url)

    # 检查请求是否成功
    if response.status_code == 200:
        response.encoding = 'utf-8'  # 设置正确的编码方式
        # 解析HTML
        soup = BeautifulSoup(response.text, 'html.parser')

        # 找到包含公报标题和链接的元素
        # 假设公报标题和链接在<a>标签中，并且这些标签位于某个<div>容器内
        reports_container = soup.find('div', class_='list-content')  # 根据实际情况调整class名称

        if reports_container:
            # 查找所有的<a>标签
            links = reports_container.find_all('a',class_='fl pc_1600')

            # 获取基础URL
            # base_url = url.rsplit('/', 1)[0]

            # 提取所有公报标题及其链接地址
            # 形成absolute_href，2012年前后不一，处理成完整绝对地址链接
            reports = []
            for link in links:
                href = link.get('href')
                if href and './' in href:  # 只处理相对链接
                    # 获取链接地址
                    absolute_href = f"{base_url}{href.replace('./', '')}"
                    # https://www.stats.gov.cn
                else:
                    base_url_0='https://www.stats.gov.cn'
                    absolute_href = f"{base_url_0}{href}"
                # 提取标题（假设标题与日期之间使用 “ ”空格隔开）
                title_parts = re.split(r' ', link.text.strip())
                if len(title_parts) > 1:
                    title = title_parts[0].rstrip()  # 取分割后的第一部分作为标题
                else:
                    title = link.text.strip()  # 如果没有分割，则直接使用全部文本作为标题

                reports.append((title, absolute_href))

            return reports
        else:
            return []
    else:
        print("Failed to retrieve the webpage:", response.status_code)
        return []


# base_url = 'https://www.stats.gov.cn/sj/tjgb/ndtjgb/qgndtjgb/'
# num_pages = 4  # 总页数
#
# urls = url_list(base_url,num_pages)
# for url in urls:
#     article_list = extract_reports(url)
#     print(article_list)
